package com.luom.fsp.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.luom.fsp.model.dto.coupon.CouponQueryRequest;
import com.luom.fsp.model.entity.Coupon;
import com.luom.fsp.model.vo.CouponVO;

import javax.servlet.http.HttpServletRequest;

/**
 * 优惠券服务
 *
*/
public interface CouponService extends IService<Coupon> {

    /**
     * 校验数据
     *
     * @param coupon
     * @param add 对创建的数据进行校验
     */
    void validCoupon(Coupon coupon, boolean add);

    /**
     * 获取查询条件
     *
     * @param couponQueryRequest
     * @return
     */
    QueryWrapper<Coupon> getQueryWrapper(CouponQueryRequest couponQueryRequest);
    
    /**
     * 获取优惠券封装
     *
     * @param coupon
     * @param request
     * @return
     */
    CouponVO getCouponVO(Coupon coupon, HttpServletRequest request);

    /**
     * 分页获取优惠券封装
     *
     * @param couponPage
     * @param request
     * @return
     */
    Page<CouponVO> getCouponVOPage(Page<Coupon> couponPage, HttpServletRequest request);

    /**
     * 获取用户可购买的优惠券
     * @param userId
     * @param current
     * @param pageSize
     * @return
     */
    Page<CouponVO> getListCanBuyCoupon(Long userId, long current, long pageSize);

    /**
     * 获取用户可购买的秒杀券列表
     * @param userId
     * @param current
     * @param pageSize
     * @return
     */
    Page<CouponVO> getListSeckillCoupon(Long userId, long current, long pageSize);

    long addCoupon(Coupon coupon);
}
